<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body>
    <script>
        //【1】match返回结果的格式问题
        var string = '2017.06.27';
        var regex_n = /\b(\d+)\b/;
        console.log(string.match(regex_n)); // ["2017", "2017", index: 0, input: "2017.06.27"]
        //【#】没有g，返回的是标准匹配格式，首元素是整体匹配结果，然后是分组匹配
        // 内容，然后是整体匹配的第一个下标，最后是输入的目标字符串
        var regex_g = /\b(\d+)\b/g;
        console.log(string.match(regex_g)); //["2017", "06", "27"]
        //【#】有g，返回的是所有匹配的内容。【有g，会和有g的exec一样，改变index和lastIndex的值，但是
        // 是一次性的，不是exec那样的过程累积改变的】
        //【2】exec比match更强大
        //exec方法的特点：1》如果不是全局匹配，返回结果和match的非全局匹配一样。
        //2》如果是全局匹配，和非全局匹配一样，但是会将匹配文本的最后一个字符的下一个位置
        //设置为RegExpObject 的lastIndex 属性，重复调用exec方法的话，下次匹配起始位置从这里开始。
        var string8 = '2017.06.27';
        var regex8G = /\b(\d+)\b/g;
        var regex8N = /\b(\d+)\b/;
        console.log(regex8G.exec(string8));
        //["2017", "2017", index: 0, input: "2017.06.27"]
        console.log(regex8N.exec(string8));
        //["2017", "2017", index: 0, input: "2017.06.27"]
        console.log(regex8G.lastIndex); //4
        console.log(string8); //并不改变原来的字符串
        console.log(regex8G.exec(string8));
        //["06", "06", index: 5, input: "2017.06.27"]
        console.log(regex8G.lastIndex); //7
        console.log(regex8G.exec(string8));
        //["27", "27", index: 8, input: "2017.06.27"]
        //【案例】结合以上的exec的特点，配合while循环
        var sky = '2017.06.27';
        var regex_sky = /\b(\d+)\b/g;
        var result;
        while ((result = regex_sky.exec(sky)) != null) {
            //此处写为result =regex_sky.exec(sky)也行
            console.log(result, regex_sky.lastIndex); //将逐渐靠后匹配，直到null为止。
        };
        //【3】修饰符g，对exec和test的影响
        //目前涉及正则，我们讨论了string的四个方法，【search，match，split，replace】
        // reg的两个方法。【exec，test】
        //关于lastIndex属性，string的四个方法，每次匹配时都是从0开始的。而正则的exec和test方法
        //如果是全局正则匹配，每次都会将lastIndex修改，即延后。
    </script>
</body>

</html>